/**
 * 
 */
package br.com.skynix.tcmc.model.rh;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada;
import br.com.skynix.tcmc.util.WebUtil;

/**
 * @author davi
 * 
 */
public enum EstadoCivilEnum implements EntidadeEnumerada {
	SOLTEIRO("S", "label_enum_estado_civil_solteiro",
			"label_enum_estado_civil_solteiro"), //
	CASADO("C", "label_enum_estado_civil_casado",
			"label_enum_estado_civil_casado"), //
	DIVORCIADO("D", "label_enum_estado_civil_divorciado",
			"label_enum_estado_civil_divorciado"), //
	VIUVO("V", "label_enum_estado_civil_viuvo", "label_enum_estado_civil_viuvo")//
	;

	private String codigo;

	private String textoCurto;

	private String textoLongo;

	private static Map<String, EstadoCivilEnum> estadosCivis = new HashMap<String, EstadoCivilEnum>();
	static {
		for (EstadoCivilEnum estadoCivil : EnumSet.allOf(EstadoCivilEnum.class)) {
			estadosCivis.put(estadoCivil.getCodigo(), estadoCivil);
		}
	}

	/**
	 * @param codigo
	 * @param textoCurto
	 * @param textoLongo
	 */
	private EstadoCivilEnum(String codigo, String textoCurto, String textoLongo) {
		this.codigo = codigo;
		this.textoCurto = textoCurto;
		this.textoLongo = textoLongo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getCodigo()
	 */
	@Override
	public String getCodigo() {
		return codigo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getTextoCurto()
	 */
	@Override
	public String getTextoCurto() {
		return WebUtil.getLabel(textoCurto);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.enumeration.EntidadeEnumerada#getTextoLongo()
	 */
	@Override
	public String getTextoLongo() {
		return WebUtil.getLabel(textoLongo);
	}

	public static EstadoCivilEnum getEstado(String codigo) {
		return estadosCivis.get(codigo);
	}

	public static Collection<EstadoCivilEnum> listAll() {
		List<EstadoCivilEnum> estados = new ArrayList<EstadoCivilEnum>(
				estadosCivis.values());
		Collections.sort(estados, new Comparator<EstadoCivilEnum>() {

			@Override
			public int compare(EstadoCivilEnum o1, EstadoCivilEnum o2) {
				return o1.getCodigo().compareTo(o2.getCodigo());
			}
		});
		return estados;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Enum#toString()
	 */
	@Override
	public String toString() {
		return textoCurto;
	}
}
